﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Correo;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Ventas;
using Pe.Petecos.Comercial.Cross.Core.Constantes;
using Pe.Petecos.Comercial.Presentacion.Core.Controllers.Base;
using Pe.Petecos.Comercial.Presentacion.Core.Security;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using Microsoft.Reporting.WebForms;
using System.IO;

namespace Pe.Petecos.Comercial.Presentacion.Core.Controllers
{
    /// <summary>
    /// Controladora de Ingreso Sistema
    /// </summary>
    /// <remarks>
    /// Creación: 	GMD 20150708 <br />
    /// Modificación: 	         <br />
    /// </remarks>
    public class IngresoSistemaController : Controller
    {
        public ISeguridadService seguridadService { get; set; }

        public ICorreoService correoService { get; set; }

        public IVentasService ventasService { get; set; }
        /// <summary>
        /// Carga de Vista de Ingreso al Sistema
        /// </summary>
        /// <returns>Vista de Ingreso al Sistema</returns>
        public ActionResult Index()
        {
            HttpSessionContext.RemoveAccount();

            //DataEmail dataEmail = new DataEmail();
            //dataEmail.Asunto = "Demo Envio Correo";
            //dataEmail.Para.Add(new DataDirecciones() { Email = "miguel.lunavigo@gmail.com", NombreCompleto = "miguel luna" });
            //dataEmail.Para.Add(new DataDirecciones() { Email = "mluna@gmd.com.pe", NombreCompleto = "miguel luna" });
            //dataEmail.Para.Add(new DataDirecciones() { Email = "rcespedessan@gmail.com", NombreCompleto = "Ricardo" });
            //dataEmail.Mensaje = "Envio Satisfactorio";
            //var or = ventasService.ReporteOrdenCompra(new FiltroOrdenCompra() { CodigoOrdenCompra = 1 }).Result.ToList();
            //LocalReport localReport = new LocalReport();
            //string path = Path.Combine(Server.MapPath("~/ReportesRDLC"), "rptOrdenCompra.rdlc");
            //if (System.IO.File.Exists(path))
            //{
            //    localReport.ReportPath = path;
            //}
            //localReport.DataSources.Clear();

            //List<DataOrdenCompra> or = new List<DataOrdenCompra>();
            //DataOrdenCompra row2 = new DataOrdenCompra();
            //row2.CodigoOrdenCompra = 1;
            //row2.CodigoProyecto = 1;
            //row2.CodigoProveedor = 1;

            //or.Add(row2);

            //ReportDataSource rd = new ReportDataSource("dtsOrdenCompra", or.Select(row => new
            //{
            //    row.CodigoOrdenCompra,
            //    row.CodigoProyecto,
            //    row.CodigoProveedor
            //}));

            //localReport.DataSources.Add(rd);

            //List<DataOrdenCompraDetalle> or2 = new List<DataOrdenCompraDetalle>();
            //DataOrdenCompraDetalle row3 = new DataOrdenCompraDetalle();
            //row3.CodigoOrdenCompra = 1;
            //row3.NombreArticulo = "Articulo1";
            //or2.Add(row3);

            //row3 = new DataOrdenCompraDetalle();
            //row3.CodigoOrdenCompra = 1;
            //row3.NombreArticulo = "Articulo2";
            //or2.Add(row3);

            //row3 = new DataOrdenCompraDetalle();
            //row3.CodigoOrdenCompra = 1;
            //row3.NombreArticulo = "Articulo3";
            //or2.Add(row3);

            //rd = new ReportDataSource("dtsOrdenCompraDetalle", or2.Select(row => new
            //{
            //    row.CodigoOrdenCompra,
            //    row.NombreArticulo
            //}));
            //localReport.DataSources.Add(rd);


            //localReport.Refresh();
            //string reportType = "PDF";
            //string mimeType;
            //string encoding;
            //string fileNameExtension;

            //string deviceInfo = "<DeviceInfo>" +
            //"  <OutputFormat>" + "PDF" + "</OutputFormat>" +
            //"  <PageWidth>8.5in</PageWidth>" +
            //"  <PageHeight>11in</PageHeight>" +
            //"  <MarginTop>0.5in</MarginTop>" +
            //"  <MarginLeft>0.5in</MarginLeft>" +
            //"  <MarginRight>0.5in</MarginRight>" +
            //"  <MarginBottom>0.5in</MarginBottom>" +
            //"</DeviceInfo>";

            //Warning[] warnings;
            //string[] streams;
            //byte[] renderedBytes;

            //renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

            //dataEmail.Adjuntos.Add(new DataAdjuntos() { Archivo = renderedBytes, NombreArchivo = "OrdenCompra.pdf" });
            //correoService.Enviar(dataEmail);

            //return File(renderedBytes, mimeType, string.Concat("Reporte_de_resultados_carga_masiva_", DateTime.Now.ToString("dd_MM_yyyy"), ".pdf"));


            return View();
        }

        public JsonResult Loguear(string cuenta, string contrasena)
        {
            

            ProcessResult<object> resultado = new ProcessResult<object>();
            resultado.Result = DatosConstantes.EstadoLogueo.Exito;

            var usuario = seguridadService.LoguearUsuario(cuenta).Result;

            if (usuario == null)
            {
                resultado.Result = DatosConstantes.EstadoLogueo.CuentaIncorrecta;
            }
            else if (!usuario.Contrasena.Equals(contrasena))
            {
                resultado.Result = DatosConstantes.EstadoLogueo.ContrasenaIncorrecta;
            }
            else
            {
                CuentaUsuario usuarioLogueado = new CuentaUsuario();
                usuarioLogueado.CodigoUsuario = usuario.CodigoUsuario;
                usuarioLogueado.CodigoPerfil = usuario.CodigoPerfil;
                usuarioLogueado.Nombre = usuario.Nombre;
                usuarioLogueado.ApellidoPaterno = usuario.ApellidoPaterno;
                usuarioLogueado.ApellidoMaterno = usuario.ApellidoMaterno;
                usuarioLogueado.CorreoElectronico = usuario.CorreoElectronico;
                usuarioLogueado.Cuenta = usuario.Cuenta;
                usuarioLogueado.Contrasena = usuario.Contrasena;
                usuarioLogueado.CodigoEstado = usuario.CodigoEstado;
                //usuarioLogueado.Imagen = usuario.Imagen;
                HttpSessionContext.SetAccount(usuarioLogueado);
            }

            return Json(resultado);
        }
    }
}
